package demo1229.pm;

import java.util.concurrent.*;
/*
  JDK5加入,与Runnable接口类似,实现之后代表一个线程任务.
  Callable接口具有泛型返回值,可以声明异常.
  java.util.concurrent 接口 Callable<V>
  V call()throws Exception

  ExecutorService接口中的方法:
  <T> Future<T> submit(Callable<T> task);
  提交一个返回值的任务用于执行，返回一个表示任务的未决结果的 Future。
  该 Future 的 get 方法在成功完成时将会返回该任务的结果。

 */
public class Demo_02 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService pool = Executors.newFixedThreadPool(2);
        /*Future<Integer> future = pool.submit(new CallImpl());
        Integer sum = future.get();
        System.out.println(sum);*/
        Integer sum = pool.submit(new CallImpl()).get();
    }
}

class CallImpl implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 1; i < 101; i++) {
            sum += i;
        }
        return sum;
    }
}